package biblioteca.etiquetas;

import java.io.IOException;
import java.util.Calendar;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import biblioteca.dao.BibliotecaDAO;
import biblioteca.dao.exceptions.BibliotecaDAOException;
import biblioteca.modelo.*;

public class PrestamoTag extends TagSupport{	
	Prestamo prestamo;
	
	//objeto logger
	final Log logger= LogFactory.getLog(getClass());
	
	@Override
	public int doEndTag() throws JspException {
		return EVAL_PAGE;
	}
	
	@Override
	public int doStartTag() throws JspException {
		logger.info("entramos en codigo de etiqueta prestamo");		
		JspWriter print = pageContext.getOut();
		HttpServletRequest request=(HttpServletRequest) pageContext.getRequest();
		//rescato el DAO de la aplicacion
		BibliotecaDAO dao=(BibliotecaDAO) request.getSession().getServletContext().getAttribute("dao");
		
		try{
			//busco el libro a mostrar en la lista de libros		
			Libro libro=dao.buscarLibro(this.getPrestamo().getLibro());
			
			
			if(libro==null){
				logger.error("No se ha encontrado el libro para tomar prestado");
				print.println("<b>No se ha encontrado el libro</b>");			
			}
			else{				
				//el valor del atributo prestado del libro pasa a ser true
				libro.setPrestado(true);
				dao.guardarLibro(libro);
				//guardo un nuevo prestamo			
				Prestamo prestamo=this.getPrestamo();
				dao.guardarPrestamo(prestamo);
				
				logger.info("ha sido tomado en prestamo el libro "+this.getPrestamo().getLibro().getTitulo());
				print.println("<p>El libro ha sido tomado en pr&eacute;stamo.</p><br /><p>Gracias por utilizar nuestro servicio</p>"+
						"<br />");
			}
		}catch (IOException e) {			
			e.printStackTrace();
		}catch (BibliotecaDAOException e) {			
			e.printStackTrace();
		}
		
		return SKIP_BODY;
	}

	public Prestamo getPrestamo() {
		return prestamo;
	}

	public void setPrestamo(Prestamo prestamo) {
		this.prestamo = prestamo;
	}

	
}
